const path = require('path');
const fs = require('fs');

var reg = /\.\..*\/vh-mobile\/node_modules\/@antmjs\/vantui\/es\/toast\/index.js/g;
var reactReg = /\.\..*\/vh-mobile\/node_modules\/react\/cjs\//g;
var dialogreg = /\.\..*\/vh-mobile\/node_modules\/@antmjs\/vantui\/es\/dialog\/index.js/g;
var schedulerReg = /\.\..*\/vh-mobile\/node_modules\/scheduler\/cjs\//g;
/**
 * 文件遍历方法修改
 * @param filePath 需要遍历的文件路径
 */
function fileDisplay(filePath) {
  //根据文件路径读取文件，返回文件列表
  fs.readdir(filePath, function (err, files) {
    if (err) {
      console.warn(err);
    } else {
      //遍历读取到的文件列表
      files.forEach(function (filename) {
        //获取当前文件的绝对路径
        var filedir = path.join(filePath, filename);
        //根据文件路径获取文件信息，返回一个fs.Stats对象
        fs.stat(filedir, function (eror, stats) {
          if (eror) {
            console.warn('获取文件stats失败');
          } else {
            var isFile = stats.isFile(); //是文件
            var isDir = stats.isDirectory(); //是文件夹
            if (isFile && filedir.indexOf('index.js') !== -1) {
              fs.readFile(filedir, 'utf-8', function (err, data) {
                if (err) {
                  console.log('读取编译译后的文件失败...', err);
                }
                const newData = data
                  .replace(reg, './node_modules/@antmjs/vantui/es/toast/index.js')
                  .replace(dialogreg, './node_modules/@antmjs/vantui/es/dialog/index.js')
                  .replace(reactReg, './node_modules/react/cjs/')
                  .replace(schedulerReg, './node_modules/scheduler/cjs/');

                fs.writeFile(filedir, newData, function (err) {
                  if (err) {
                    console.log('修改编译后的文件失败...', err);
                  }
                });
              });
            }
            if (isDir) {
              fileDisplay(filedir); //递归，如果是文件夹，就继续遍历该文件夹下面的文件
            }
          }
        });
      });
    }
  });
}

module.exports = function handler(percentage, msg) {
  if (percentage == 0) {
    // 编译完成后对小程序私有project.private.config.json进行覆盖
    const privateConfigFile = path.resolve(`weapp/project.private.config.json`);
    const hasPrivateConfigFile = path.resolve(`project.private.config.json`);
    if (!fs.existsSync(privateConfigFile) && fs.existsSync(hasPrivateConfigFile)) {
      fs.copyFile(hasPrivateConfigFile, privateConfigFile, (err) => {});
    }
  }
  if (percentage == 1) {
    if (process.env.YANR_LINK_MODE) {
      // 编译完成后对common进行处理
      const pathfile = path.resolve(`weapp/common.js`);
      fs.readFile(pathfile, 'utf-8', function (err, data) {
        if (err) {
          console.log('读取编译译后的 common.js 文件失败...', err);
        }

        const newData = data
          .replace(reg, './node_modules/@antmjs/vantui/es/toast/index.js')
          .replace(dialogreg, './node_modules/@antmjs/vantui/es/dialog/index.js')
          .replace(reactReg, './node_modules/react/cjs/')
          .replace(schedulerReg, './node_modules/scheduler/cjs/');

        fs.writeFile(pathfile, newData, function (err) {
          if (err) {
            console.log('修改编译后的 common.js 文件失败...', err);
          }
        });
      });
      // 编译完成后对vantui进行处理
      const vantuifile = path.resolve(`weapp/vantui.js`);
      fs.readFile(vantuifile, 'utf-8', function (err, data) {
        if (err) {
          console.log('读取编译译后的 vantui.js 文件失败...', err);
        }
        const newData = data
          .replace(reactReg, './node_modules/react/cjs/')
          .replace(schedulerReg, './node_modules/scheduler/cjs/');
        fs.writeFile(vantuifile, newData, function (err) {
          if (err) {
            console.log('修改编译后的 vantui.js 文件失败...', err);
          }
        });
      });

      const pagespath = path.resolve(`weapp/pages`);
      fileDisplay(pagespath);
    }
  }
};
